import requests
import re
from datetime import datetime
import json
import time
import os

# 你想保留的字段列表
fields_keep = ["sNick", "sScreenshot", "iStartTime"]
url = 'https://www.huya.com/g/4079'  # 替换为你要爬取的网页URL
# 设定保存图片的根目录
root_dir = 'D:\pythonProject\虎牙\image'
# 模拟浏览器，发送请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
}
# 使用正则表达式查找ALL_LIST_DATA变量的值
pattern = r'var ALL_LIST_DATA = (\[.*?\]);'


#排查文件是否已存在
def image_exists(directory, filename):
    # 构建文件的完整路径
    file_path = os.path.join(directory, filename)
    # 检查文件是否存在
    return os.path.isfile(file_path)


# 过滤字段
def filter_fields(data, fields_to_keep):
    filtered_datas = []
    for item in data:
        filtered_item = {key: item[key] for key in fields_to_keep}
        # 转换时间戳
        filtered_item["iStartTime"] = datetime.fromtimestamp(filtered_item["iStartTime"]).strftime('%Y-%m-%d %H:%M:%S')
        # 添加排序字段
        filtered_datas.append(filtered_item)

    # 根据 iStartTime 排序并添加 order 字段
    filtered_datas.sort(key=lambda x: datetime.strptime(x["iStartTime"], '%Y-%m-%d %H:%M:%S'))
    for index, item in enumerate(filtered_datas):
        item["order"] = index + 1
    return filtered_datas


# 发送HTTP GET请求
response = requests.get(url, headers=headers)
# 检查请求是否成功
response.raise_for_status()  # 如果请求失败，将引发HTTPError异常
# 获取网页源码
webpage_source = response.text

match = re.search(pattern, webpage_source, re.DOTALL)
print(match)
if match:
    json_str = match.group(1).strip()
    data_list = json.loads(json_str)
# 使用函数过滤字段
filtered_data = filter_fields(data_list, fields_keep)
print(filtered_data)

# 确保目标目录存在
if not os.path.exists(root_dir):
    os.makedirs(root_dir)

# 遍历JSON数据中的每个条目
for item in filtered_data:
    # 获取截图URL和昵称（用于命名文件，如果需要）
    screenshot_url = item["sScreenshot"]
    nickname = item["sNick"]

    # 使程序休眠指定的时间
    time.sleep(1)

    # 从URL中提取文件名（或根据需要生成文件名）
    # 这里我们简单地使用昵称和扩展名（从URL中推断）
    file_extension = screenshot_url.split('.')[-1].split('?')[0]  # 处理可能的查询字符串
    file_name = f"{nickname}.{file_extension}"
    if image_exists(root_dir, file_name):
        print(f"{file_name} 已存在.存储路径为{os.path.join(root_dir, file_name)}")
    else:
        # 构建完整的文件路径
        file_path = os.path.join(root_dir, file_name)

        # 下载图片并保存到文件
        try:
            response = requests.get(screenshot_url, stream=True)
            response.raise_for_status()  # 如果请求出错，抛出HTTPError异常
            with open(file_path, 'wb') as file:
                for chunk in response.iter_content(chunk_size=8192):
                    file.write(chunk)
            print(f"成功下载并保存图片: {file_path}")
        except requests.exceptions.RequestException as e:
            print(f"下载图片时出错: {e}")